 #include "hal_aip33629.h"
#if (QIANG_YING_DEVICE == 0)
/**********************************************************
//	*	函数名称：IIC开始函数
//	*	功		能：IIC——START
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void _nop_ (void)
{
	
}
void AiP33629_delay_us(unsigned short j)
{
  unsigned short i,k;
  for(k=0;k<j;k++)
  {
    for(i=0;i<1;i++)
    {
    }
  }
}
void AiP33629_start(void)			//开始信号,SCL为高时，SDA下降沿
{			
	AiP33629_delay_us(5);
	AiP33629_SDA_H;// = 1;
	AiP33629_delay_us(5);
	_nop_();
	AiP33629_SCL_H;// = 1;
	AiP33629_delay_us(5);
	_nop_();
	AiP33629_SDA_L ;//= 0;
	AiP33629_delay_us(5);
	_nop_();
	AiP33629_SCL_L ;//= 0;
	AiP33629_delay_us(5);
	_nop_();
}

/**********************************************************
//	*	函数名称：IIC停止函数
//	*	功		能：IIC-STOP
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void AiP33629_stop(void)
{
	//停止信号,SCL为高时，SDA上升沿
	AiP33629_SCL_L;// = 0;
	AiP33629_delay_us(5);
	_nop_();
	AiP33629_SDA_L;// = 0;
	AiP33629_delay_us(5);
	_nop_();
	AiP33629_SCL_H;// = 1;
	AiP33629_delay_us(5);
	_nop_();
	AiP33629_SDA_H;// = 1;
	AiP33629_delay_us(5);
	_nop_();
}
/**********************************************************
//	*	函数名称：IIC_ACK函数
//	*	功		能：从机发出应答主机（单片机）接收
//	*	参		数：无
//	*	返 回 值：无
***********************************************************/
void AiP33629_ACK(void)
{
	unsigned char  ucErrTime=0;
  AiP33629_SCL_L;//=0;
	_nop_();
	AiP33629_delay_us(2);
	AiP33629_SDA_IN();
	AiP33629_SCL_H;
	AiP33629_delay_us(2);
//	while(AiP33629_READ_SDA)
//	{
//		ucErrTime++;
//		if(ucErrTime>10)  //这里之前是250 现在改为10
//		{
//			AiP33629_stop();
//		}
//	}
  AiP33629_SCL_L;//=0;
	AiP33629_delay_us(5);
  AiP33629_SDA_OUT();
	AiP33629_delay_us(2);
   _nop_();
}

/**********************************************************
//	*	函数名称：数据传输
//	*	功		能：写8bit数据
//	*	参		数：dat（发送到数据）
//	*	返 回 值：无
***********************************************************/
void AiP33629_write(unsigned char dat)	//写8bit数据
{
	unsigned char i;
	for(i = 0; i < 8; i++)
	{
		AiP33629_SCL_L;// = 0;
		_nop_();
		AiP33629_delay_us(5);
//		AiP33629_SDA = dat & 0x80;
		if((dat&0x80)==0x80)   AiP33629_SDA_H;
		else	                 AiP33629_SDA_L;
		_nop_();
		AiP33629_delay_us(5);
		AiP33629_SCL_H;// = 1;
		dat <<= 1;
		_nop_();
		AiP33629_delay_us(5);
	} 
}
/**********************************************************
//	*	函数名称：命令数据传输
//	*	功		能：发送8bit命令
//	*	参		数：cmd（发送到命令）
//	*	返 回 值：无
***********************************************************/
void AiP33629_Write_CMD(unsigned char cmd)				//写8位指令
{
	AiP33629_start();					            
	AiP33629_write(Address_Write_00);
	AiP33629_ACK();
	AiP33629_write(cmd);				            
	AiP33629_ACK();
	AiP33629_stop();					              
}

/**********************************************************
//	*	函数名称：连续地址写控制数据
//	*	功		能：连续地址写
//	*	参		数：
//	*	返 回 值：无
***********************************************************/
void AiP33629_I2C_Write_144(unsigned char dat)
{
	unsigned char i;
	AiP33629_start();					   
	AiP33629_write(Address_Write_00);
	AiP33629_ACK();	
	AiP33629_write(0x6C);			
	AiP33629_ACK();
	for(i=0;i<144;i++)
	{
		AiP33629_write(dat);			 
		AiP33629_ACK();	
	}
	  AiP33629_stop();					    
}

/**********************************************************
//	*	函数名称：固定地址写数据
//	*	功		能：固定地址写 		@7 GRIDn:列  SEGn:行  PWMn：亮度   Lengethn:写的长度
//	*	参		数：
//	*	返 回 值：无
***********************************************************/
void AiP33629_I2C_Write_Single(unsigned char GRIDn,unsigned char SEGn,unsigned char PWMn,unsigned char Lengethn)
{
	unsigned char i;
	AiP33629_Write_CMD(0xC0+GRIDn);
	AiP33629_Write_CMD(0xE0+SEGn);

	AiP33629_start();					   
	AiP33629_write(Address_Write_00);
	AiP33629_ACK();	
	AiP33629_write(0x6C);				
	AiP33629_ACK();	
	for(i=0;i<Lengethn;i++)
	{
		AiP33629_write(PWMn);			 
		AiP33629_ACK();	
	}
	  AiP33629_stop();					
}


/**********************************************************
//	*	函数名称：芯片初始化
//	*	功		能：初始化内部寄存器及显示数据
//	*	参		数：
//	*	返 回 值：
***********************************************************/
void AiP33629_init(void)
{
	AiP33629_SCL_OUT();
	AiP33629_SDA_OUT();
	AiP33629_delay_us(2);
	//寄存器初始化配置
	AiP33629_Write_CMD(0x3f);//最大电流
	AiP33629_Write_CMD(0x48);//GRID1~GRID9均有效
	AiP33629_Write_CMD(0x53);//死区时间为四个时钟周期/无过温保护
	AiP33629_Write_CMD(0x6C);//使用大于10mA电流配置/RAM从0x00开始/使用内部电阻/不睡眠
	AiP33629_Write_CMD(0x87);//使用800HZ扫描/开显示/开消影
	AiP33629_Write_CMD(0x91);//不使用全局复位/使能LVR功能	
	AiP33629_Write_CMD(0xC0);//RAM地址高位（GRID列）
  AiP33629_Write_CMD(0xE0);//RAM地址低位（SEG行）
}

void OnTestLed(void)
{
	uint8_t data[144] = 
	{
		0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
		0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
		0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
		0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
		0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
		0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/**/0xff,0xff,0xff,0xff,0xff,0xff,0xff,0,
		0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
		0,0,0,0,
	};
	unsigned char i;
	AiP33629_start();					   
	AiP33629_write(Address_Write_00);
	AiP33629_ACK();	
	AiP33629_write(0x6C);			
	AiP33629_ACK();
	for(i=0;i<144;i++)
	{
		AiP33629_write(data[i]);			 
		AiP33629_ACK();	
	}
	  AiP33629_stop();			
}



#endif

